iT邦幫忙

0

常駐程式(派班中心)監視程式

  • 分享至 

  • xImage
  •  

這支批次程式本來是用來監視鼎新 ERP 派班中心是否掛掉用的,因為原理差不多稍加改良一下,這樣就可以監視任何想要監視的常駐程式了.

說明:
鼎新派班中心每週至少要當掉一次,客戶反應給鼎新但鼎新似乎沒打算更新他們的程式,因為這個問題幾年前就有人提出過,到現在還是一樣.

程式功能:
當常駐程式掛掉時可以在指定的時間內重新啟動常駐程式
預設的設定可以在鼎新 ERP 派班中心掛掉時會寫入一個事件到應用程式事件記錄中,事件識別碼為 666 並且重新啟動派班中心,修改相關參數可以在當掉時發出一封電子郵件給管理者。
可以修改 Set APPPath=及 Set IMAGENAME= 以及 Set CallIMAGENAME= 三個參數來監視其它的常駐程式。

參數說明:
AppName= 應用程式名稱(視窗標題)
Tmier= 等待多久(秒)偵測一次應用程式是否掛掉
PluginSourec= 寄信外掛程式來源檔(如果有自己的位置時才修改)
PluginViewer= 寄信外掛程式說明頁(如果有自己的位置時才修改)
EventID= 可以指定寫入的事件識別碼(1-1000)
StartUP= 是否要在登入桌面時自動啟動(0/1)
AutoSend= 當發生錯誤時是否郵寄信件給管理者(0/1)

完整內容:
將以下內容貼到記事本中存成 .bat 或 .cmd 檔即可執行

Rem 視需求修改底下三行路徑及執行程式正確資訊
Set APPPath=D:\SmartERP\s_dsbin
Set IMAGENAME=Dispatcher.exe
Set CallIMAGENAME=
Rem 除非你知道你在做什麼否則請勿修改下方內容
@Echo Off&Cls
:Head
If Not defined CallIMAGENAME Set CallIMAGENAME=%IMAGENAME%
If Not Exist "%APPPath%\%IMAGENAME%" Call :AppCheck "%~0"
Set AppName=鼎新派班中心
setlocal ENABLEDELAYEDEXPANSION
Set Err=1&Rem 偵錯計數器
Set Plugin=0&Rem 外掛計數器
Set Tmier=5&循環等待時間(秒)
Set PluginSourec=https://www.glob.com.au/sendmail/sendmail.zip&Rem 外掛來源檔
Set PluginViewer=https://www.glob.com.au/sendmail/&Rem 外掛說明位置
Set EventID=666&Rem 事件識別碼
Set StartTime=[%Date%-%Time%]&Rem 開始執行時間
Set StartUP=1&Rem 1為登入後自動啟動,0為刪除啟動項目
Set AutoSend=1&Rem 1為發生錯誤郵寄信件給管理者
Set Option=smtp_server,smtp_port,auth_username,auth_password,smtp_ssl,default_domain,error_logfile,debug_logfile,pop3_server,pop3_username,pop3_password,force_recipient,force_sender,hostname
Set TempMail=%TEMP%\temp.mail&Rem 郵件標頭暫存檔
Set Mailini=%~pd0SendMail.ini&Rem SMTP 設定檔,檔名不可變更
Set BODY=%TEMP%\Message.txt&Rem 信件內容,指定一個檔案,與本程式不同路徑時應填入完整路徑
::----------------SMTP 設定檔參數---------------------
::未使用到的參數請留空,
:: smtp_server smtp_port auth_username auth_password smtp_ssl 
:: default_domain force_sender hostname From_Mail To_Mail
::以上參數需修改成可用的 SMTP 伺服器參數,其它視需求修改
::主機位置
Set smtp_server=edm.dingerbs.com
::SMTP 連接埠
Set smtp_port=25
::SMTP 使用者帳號
Set auth_username=zzzz
::SMTP 使用者密碼
Set auth_password=**************
Rem smtp_ssl參數可使用 auto/ssl/tls/none 等四個加密方式
Set smtp_ssl=auto
::預設伺服器名稱,當寄件人郵件地址不完整時,將自動添加這個網域後綴名
Set default_domain=edm.dingerbs.com
::當發生錯誤時會將錯誤寫入這個檔案裡
Set error_logfile=
::需要除錯時可以將這個設定打開,發送的過程將會記錄在這個檔案裡
Set debug_logfile=
Rem 除非你的 SMTP 在登入前需要先登入POP3,否則底下三項應停用或留空
Set pop3_server=
Set pop3_username=
Set pop3_password=
::強制發件人為,只影響標頭 "MAIL FROM"不會影響 FROM 中的寄件者名稱
Set force_sender=www@edm.dingerbs.com
::強制收件人為,只影響標頭 "RCTP TO"不會影響 TO 中的寄件者名稱
Set force_recipient=zzz@mail.dingerbs.com
::HELO/HEOL 時送給對方的主機名稱
Set hostname=AgEnt.DingerBS.Com
::寄件者
Set From_Alias=日誌通報員
Set From_Mail=www@edm.dingerbs.com
::收件者
Set TO_Alias=日誌管理員
Set To_Mail=zzz@mail.dingerbs.com
::副件
Set CC=xxx@mail.dingerbs.com
::隱藏副件
Set Bcc=yyy@mail.dingerbs.com
::信件標題
Set Subject=[%COMPUTERNAME%]報表[%DATE%]:%AppName% 通報
::----------------SMTP 設定檔結束---------------------
Title %AppName% (鼎爾資訊提供)Author:Dreamer
mode con cols=70 lines=13
Color F1
If %AutoSend% EQU 1 Call :CheckMail "%~pd0"
Md "%windir%\MdTest" 2>nul&&Rd "%windir%\MdTest" >nul 2>nul||(Echo.&Echo.&Echo.	 注意:動作完未成!&Echo 請用右鍵以系統管理員身分執行這個程式&Echo.&Echo.&Echo.&Echo.&Pause&Exit)
Call :StartUP "%~0" 

:Do 
wmic process Where Name='%CallIMAGENAME%' Get name|findstr /i %CallIMAGENAME% >Nul&&(
Echo.&Echo.&Echo.&Echo.&Echo [%AppName%] 執行中~
)||(
Set /a Err +=1
Set Content=%AppName% 守護程式^<BR^>%AppName%於 [%DATE% %Time%] 停止運作^<BR^>經由 [%~0] 守護程式已重新啟動^<BR^>%AppName%中止次數: [%Err%] ^<BR^>守護時間:%StartTime% 起至今
Echo !Content! >"%BODY%"
If %AutoSend% EQU =1 Call :SendMail
EVENTCREATE /T "INFORMATION" /D "!Content!" /ID %EventID% /L APPLICATION /SO "%AppName%" >Nul
Start "%AppName%" "%APPPath%\%IMAGENAME%"
Echo.&Echo.&Echo.&Echo.&Echo 己重新啟動 [%AppName%]~
Cls
)
Echo.&Echo.&Echo.&Echo [%AppName%]&Echo 監視中,請勿關閉這個程式.可將本程式視窗縮到最小.   [%Time%]
TimeOut /T %Tmier%
Cls
Goto :Do

:StartUP
Set AppMonitor=HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v AppMonitor
Reg Query %AppMonitor% >Nul&&Set Reg=1||Set Reg=0 
If %StartUP% EQU 1 (
    Reg Add %AppMonitor% /F /D %1 >Nul
    Echo 已設定為登入後自動啟動,請勿搬移這個檔案
    Echo 檔案如刪除或更名或移動將造成登入後無法自行啟動
    TimeOut /t 15
) Else (
    If %StartUP% EQU 0 (
	    If %Reg% NEQ 0 Reg Delete %AppMonitor% /F >Nul
	)
)
Cls
Exit /B

:CheckMail
If Not Exist "%~1SendMail.exe" Set /A "Plugin += 1"
If Not Exist "%~1ssleay32.dll" Set /A "Plugin += 1"
If Not Exist "%~1libeay32.dll" Set /A "Plugin += 1"
If %Plugin% Gtr 0 (
Echo.&Echo.&Echo.	發生錯誤!
Echo 已設定當條件觸發時郵寄通知給管理者,但因為缺少必要檔案
Echo 所以無法繼續執行!
Echo 如要繼續,請選擇以下選項進行查看、下載、或取消
CHOICE /C VDC /M "查看說明(V)、下載檔案(D)或取消(C)。"
If !ErrorLevel! EQU 1 Explorer %PluginViewer%&Call :Head
If !ErrorLevel! EQU 2 Bitsadmin /Transfer Download %PluginSourec% "%~1SendMail.Zip"&&(
PowerShell Expand-Archive """%~1SendMail.Zip""" -DestinationPath """%~1\"""||(
    Echo.&Echo.&Echo.
    Echo 發生錯誤,解壓縮失敗
    Echo 檔案已下載,但因為你的 PowerShell 版本不支援這個解壓縮指令
    Echo 所以無法解壓縮,請手動將檔案解至這個目錄中 "%~1\"
    Echo 按下任一鍵將啟動已安裝的解壓縮軟體
    Pause
    "%~1SendMail.Zip"
)
Del /q "%~1SendMail.Zip"
Echo 外掛程式己下載完成.
Echo 重新啟動計數器.
Echo 如要取消自動發送郵件請將參數 Set AutoSend=1 設為 0
TimeOut /T 10
Call :Head
)||(
    Echo.&Echo.&Echo.
    Echo 無法下載!
    Echo 請確認下載位置是否正確
    Echo %PluginSourec%
    Echo 按下任一鍵將開啟說明頁面。
    Pause
    Explorer %PluginViewer%
    Exit 
)
If !ErrorLevel! EQU 3 Exit
Exit
)
Exit /B

:AppCheck
Echo.
Echo.	 沒有檢測到可供監視的執行程式!請設定要監視的執行程式路徑,
Echo.	 設定檔:[%~1]
Echo.	 請以記事本編輯設定檔
Echo.	 修改第二行 Set APPPath=[你的程式路徑]
Echo.	 修改第三行 Set IMAGENAME=[你的程式檔名]
Echo.	 修改第四行 Set CallIMAGENAME=[被呼叫的路徑及檔名]
Echo.	 範例:
Echo.	 Set AppPath=C:\Program Files\windows nt\accessories
Echo.	 Set IMAGENAME=wordpad.exe
Echo.	 Set CallIMAGENAME=E:\app\wordpad.exe
Echo.	 第四行為非必要項目,若發生無法自動執行被監視的程式
Echo.	 請先確認被監視的程式是否透過 IMAGENAME 呼叫另一程式
Echo.	 如是務必設定好CallIMAGENAME參數,否則會無限循環.
Echo.
Echo.	 按任一鍵將會關閉這個說明,並且開啟檔案以供設定.
Pause
Start "編輯設定" Notepad "%~1"
Exit

:SendMail
Echo [sendmail] >"%Mailini%"
For %%i In (%Option%) Do If Defined %%i Echo %%i=!%%i! >>"%Mailini%"
Echo.
Echo 郵件傳送中,請稍候.........
(
Echo Message-ID:%Time%
Echo Content-Type: text^/html;
Echo Content-Language: zh-tw
Echo Content-Transfer-Encoding: quoted-printable
Echo X-MachineName:%COMPUTERNAME%
Echo X-Report-Abuse:你可以透過郵件方式申訴電子郵件濫用 %To_Mail%
Echo List-Unsubscribe:^<mailto:%To_Mail%?subject=退訂^&body=退訂內容^>,^<http:^/^/你.的.網址^/^>
Echo X-rpcampaign:這裡是訂閱編號
Echo References:
Echo In-Reply-To:
Echo Charset:UTF-8
Echo From:%From_Alias%^<%From_Mail%^>
Echo To:%To_Alias%^<%To_Mail%^>
Echo CC:%CC%
Echo BCC:%Bcc%
Echo Subject:%Subject%
Echo.
)> "%TempMail%"
Type "%BODY%" >nul>> "%TempMail%"

"%~pd0\sendmail.exe" -t < "%TempMail%"||(
Echo.&Echo.&Echo.&Echo. 發生錯誤
Echo 請查看說明文件並修正錯誤後再次執行
Echo 按下任一鍵將開啟 SendMail 說明文件.
DEL /q "%TempMail%" "%Mailini%" "%BODY%"
Pause
Explorer %PluginViewer%
Exit
)
DEL /q "%TempMail%" "%Mailini%" "%BODY%"
Exit /B

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
lusaka216
iT邦新手 4 級 ‧ 2021-03-30 14:20:57

在搜尋時發現大大的發文 解決我的問題 感謝大大無私分享

我要留言

立即登入留言